package com.wing.productionPlan.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wing.common.utils.JsonResult;
import com.wing.enterprise.product.model.entity.ProductDetail;
import com.wing.productionPlan.model.entity.ProductionCategory;
import com.wing.productionPlan.model.entity.ProductionPlanRecord;
import com.wing.productionPlan.model.request.ProductionProcessForm;
import com.wing.productionPlan.model.response.*;

import java.util.List;
import java.util.Map;

/**
 * 排产记录-Service
 *
 * @author xiayang
 */
public interface ProductionPlanRecordService extends IService<ProductionPlanRecord> {

    /**
     * 排产记录分页列表
     *
     * @param page
     * @param params
     * @return
     */
    Page<ProductionPlanRecordVO> pageList(Page page, Map<String, Object> params);

    /**
     * 详情
     *
     * @param id
     * @return
     */
    ProductionPlanRecordVO get(Long id);

    /**
     * 查询排产计划详情
     * @param type 类型 1.整体排产 2.工序排产
     * @param productionPlanRecordId 排产记录id
     * @param bookId 整体排产需要
     * @param processId 工序排产需要
     * @return 排产信息
     */
    JsonResult getRecordDetailBy(String type, Long productionPlanRecordId, Long bookId, Long processId);

    /**
     * 查询排产物料
     * @param processId 工序id
     * @param planRecordId 排产记录/制造令id
     * @return
     */
    JsonResult getMaterialBy(String processId,String planRecordId,Page page,Map<String,Object> paramMap);

    /**
     * 查询所有物料
     * @return
     */
    Page<ProductDetail> getMaterialOthers(Page page,Map<String,Object> paramMap);

    /**
     * 查询物料在制信息
     * @param pg 分页信息
     * @param paramMap 参数
     * @return
     */
    IPage<ProductionPlanRecordReportVO> getPlanRecordCountByIn(Page<ProductionPlanRecordReportVO> pg, Map<String, Object> paramMap);

    /**
     * product查询产品库存
     * @param collect
     * @return
     */
    List<ProductCountInWarhousesVo> warehouseKc(List<Long> collect);

    /**
     * 查询排产数
     * @param collect
     * @return
     */
    List<ProductionPlanProDetailVO>  getplanCountBySkuList(List<Long> collect);

    /**
     * 查询合格数不合格数
     * @param collect
     * @return
     */
    List<ProductionPlanProDetailVO> getWorkOrderCountBySkuList(List<Long> collect);

    /**
     * 查询入库数
     * @param collect
     * @return
     */
    List<ProductionPlanProDetailVO> getInWarehouseList(List<Long> collect);

    /**
     *
     * 获取在制品详情
     * @param productDetailId 物料id
     * @return 在制品详情
     */
    ProductionPlanRecordReportDetailVO getProgressDetailBy(Long productDetailId);
}
